package fr.asip.cps3.exemple.vues.ecrans.saisie;

import java.awt.Color;
import java.awt.GridBagLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;
import javax.swing.border.EmptyBorder;

import fr.asip.cps3.exemple.modele.objets.Algo;
import fr.asip.cps3.exemple.modele.objets.Cle;
import fr.asip.cps3.exemple.vues.FenetrePrincipale;
import fr.asip.cps3.exemple.vues.composants.GridBagHelper;
import fr.asip.cps3.exemple.vues.ecrans.EcranUtil;

/**
 * Classe permettant de modéliser l'écran de saisie d'un Message et d'une Signature
 */
public class SaisieMessageSignature extends SaisieMessage {

	/**
	 * Clé de signature 
	 */
	protected Cle cle;
	
	/**
	 * Libellé Signature 
	 */
	protected JLabel libelleSignature;
	
	/**
	 * Texte Signature
	 */
	protected JTextArea texteSignature;
	
	/**
	 * Ascenseur de la Signature
	 */
	private JScrollPane scrollSignature;
	
	/**
	 * Constructeur écran de signature
	 * @param fenetre La fenêtre qui doit contenir l'écran de saisie
	 * @param algo Algorithme de signature
	 * @param cle Clé utilisé pour la signature
	 */
	public SaisieMessageSignature(FenetrePrincipale fenetre, int typeEcran, Algo algo, Cle cle) {

		super(fenetre,typeEcran,algo);
		this.cle = cle;

	}

	/**
	 * Constructeur écran de vérification de signature
	 * @param fenetre La fenêtre qui doit contenir l'écran de saisie
	 * @param algo Algorithme de signature
	 * @param cle Clé utilisé pour la signature
	 * @param messageSigne Message précèdement signé
	 * @param signature Signature du message
	 */
	public SaisieMessageSignature(FenetrePrincipale fenetre, int typeEcran, Algo algo, Cle cle, char[] messageSigne, String signature) {

		this(fenetre,typeEcran,algo,cle);
		
		libelleSignature = new JLabel("Signature :");
		texteSignature = new JTextArea(signature);
		texteSignature.setLineWrap(true);
		texteSignature.setWrapStyleWord(true);	
		scrollSignature = new JScrollPane(texteSignature,ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		scrollSignature.setBackground(Color.white);
		
		texteMessage.setText(new String(messageSigne));
		
	}	
	
	/**
     * Renvoie la signature
     * @return Signature
     */
	public String getSignature() {
		return texteSignature.getText();
	}

	/**
	 * Affiche les champs d'entrée
	 * @param fenetre La fenêtre qui doit contenir l'écran d'entrée
	 */
    public void affiche() {

    	JFrame fenetre = this.fenetre.getFenetre();
    	
    	if(fenetre != null && fenetre.getContentPane() != null) {
    	
	    	EcranUtil.supprimeTousLesComposants(((JPanel)fenetre.getContentPane()));
	    	
	        // Création du layout
	    	((JPanel)fenetre.getContentPane()).setBorder(new EmptyBorder(0, 0, 0, 0));
	        GridBagLayout layout = new GridBagLayout();
	        ((JPanel)fenetre.getContentPane()).setLayout(layout);
	        
	        // Ajout des composants
	        GridBagHelper g = new GridBagHelper(fenetre.getContentPane());
	        // Ligne 0
	        g.ajoute(libelleMessage, EcranUtil.styleLibelleSaisieMessage, 0, 0, 1, 1);
	        g.ajoute(scrollMessage, EcranUtil.styleScrollSaisieMessage, 0, 1, 1, 1);
	        
	        if(libelleSignature != null) {
		        // Ligne 1
		        g.ajoute(libelleSignature, EcranUtil.styleLibelleSaisieSignature, 1, 0, 1, 1);
		        g.ajoute(scrollSignature, EcranUtil.styleScrollSaisieSignature, 1, 1, 1, 1);
		        // Ligne 2
		        g.ajoute(soumettre, EcranUtil.styleBoutonSoumettre, 2, 0, 1, 2);
		        // Ligne 3
		        g.ajoute(barreStatut, EcranUtil.styleBarreStatut, 3, 0, 1, 2);
	        } else {
		        // Ligne 1
		        g.ajoute(soumettre, EcranUtil.styleBoutonSoumettre, 1, 0, 1, 2);
		        // Ligne 2
		        g.ajoute(barreStatut, EcranUtil.styleBarreStatut, 2, 0, 1, 2);	        	
	        }
	        
    	}
    }
    
	/**
	 * Accesseur
	 * @return Clé de signature associée à l'écran
	 */
	public Cle getCle() {
		return cle;
	}
}
